IFTTTやZapierのようなワークフロー自動化OSSのn8nをECS on Fargate上に建ててみた
こんにちは、臼田です。
みなさん、業務の自動化してますか?(挨拶
今回は少し前に話題になったワークフロー自動化OSSのn8nを触ってみたいと思います。
このツールはnpmでインストールして使うことが出来ますが、dockerイメージも用意されていたのでECS on Fargateでやってみたいなーと思ったのでやってみます。ちなみに私はECS初心者です。なのでついでにECSやFargateを初めて触る人でも最低限同じように環境構築できるように意識してまとめてみます。
n8nとは
n8nについてもう少し説明します。
先述しましたがn8nはオープンソースのワークフロー自動化ツールです。何かの動作をトリガーにアクションが始まり、条件分岐などをしながら次のアクションを実行できます。下記のイメージ図がわかりやすいと思います。この例ではGithubのスターが付いたり外れたりしたらその内容をSlackに通知します。
通常このようなワークフローはAPIで連携するため、AWS Lambdaなどでコーディングしてワークフローを作成しますが、n8nを使うことによりノンコーディングでワークフロー自動化を実現できます。
フローの作成は下記の動画を見るとイメージが付きやすいです。3分未満の動画です。
同じような既存サービスとしてIFTTTやZapier等がありますが、クラウドベースである程度使うと利用料がかかります。
n8nはOSSで、以下のような違いや特徴があります。
- アプリケーション自体は無料で利用できる
- ローカル環境にインストールして使うこともできるので、ローカルのファイルをトリガーにしたり、結果をローカルに保存したりとクラウドサービスでは実現しにくいことができる
- 自由にアクションを追加することができる
やってみた
早速AWS上に構築していきます。ただ、今回はn8nとECSを試すための最低限の実装なのでご容赦ください。もう少ししっかり利用する場合の考慮点などは最後にまとめます。
ECS on Fargateで環境を作る場合には下記の手順になります。
- (VPCの作成)
- ECSクラスターの作成
- タスク定義の作成
- タスクの作成(コンテナ起動)
出てくる用語が多いですが、概ね下記のような感じです。
- タスク: コンテナを動かして処理を実行する
- サービス: タスクを維持したりELBを紐付ける
- クラスター: タスクやサービスのかたまり
VPCの作成
VPCはEC2等のコンピューティングリソースが動作する仮想ネットワークです。新規に作成してもいいですし、既存で存在すればそれを利用しても問題ありません。
今回は初心者向けとして新規に作成しますが、ECSクラスター作成時に合わせて作ることができるためその機能で作成します。
ECSクラスターの作成
ECSのページへアクセスします。左側の「クラスター」から「クラスターの作成」を選びます。
今回はFargateを利用するため「ネットワーキングのみ」を選択して次へ
クラスター名を適当に、ここで「VPCの作成」にチェックを入れます。パラメータはデフォルトで問題ありません。「作成」します。自前でVPCを用意する場合には最低限パブリックサブネット2つを用意します。
はじめてECSを利用する場合、ここで失敗することがありますが、もう一度同じ手順で作成することにより成功します。これはサービス利用開始時にECSが利用するサービスロールが存在しないため発生します。
しばらくして作成できたら「クラスターの表示」を押して戻ります。
続いてタスク定義を作成します。「タスク定義」から「新しいタスク定義の作成」を押します。
「Fargate」を選択して次へすすみます。
タスク定義名を適当に選択します。
タスクサイズは最小の0.5GB/0.25vCPUで問題ありません。「コンテナの追加」でコンテナの設定を行っていきます。
コンテナ名を適当に、公開されているn8nのdockerイメージをn8nio/n8n:latest
として指定します。サービスポートは5678
なので入力して「追加」します。
戻ったら「作成」します。
タスク定義とロールが作成されたら「タスク定義の表示」から戻ります。
クラスター画面で作成したクラスターを選択し、「クラスターの更新」を押します。
「プロバイダーを追加」から「FARGATE」を選択して更新します。キャパシティープロバイダー戦略はFargate Spotを活用するときに活躍します。気になる方はこちら。
「タスク」タブから「新しいタスクの実行」でコンテナを動かします。
前半はそのままにしておきます。
VPCは先ほど作成されたもの、サブネットは候補すべてを選んで、セキュリティグループの「編集」を押します。
コンテナに設定されるセキュリティグループになります。適当に名前と説明を入れて、カスタムTCPで5678
を自分の環境からアクセスできるようにします。
戻ったらパブリックIPがENABLED
になっていることを確認して「タスクの実行」をします。
しばらくするとステータスがRUNNINGになるのでタスク名を押します。
タスクの中でパブリックIPが確認できるので控えます。
ブラウザで控えたIP:5678
へアクセスするとn8nにアクセスできます。これで完了です。
これでいろんな自動化ができます。捗りますね。
考慮点
本格的に利用させる場合には下記を考慮してください。
- タスクのみでサービスを起動していないため冗長性がない、SSLではない
- タスク実行ではなくサービス作成を行う、ALBでSSL終端する
- n8nは現状ではユーザ機能がないため
- セキュリティグループでのアクセス制御やALBの認証機能を利用する必要がある
- データベースを外だししていないためn8nのデータが保持されない
- データベースの外だし設定が必要
話題になったばかりのOSSですので、いろいろ機能が足りないと感じるところもありますが、コミュニティが盛んで様々なサービスとのインテグレーションが作成されていたり、開発に必要な情報は綺麗にまとまっているのでどんどん良くなっていくのではないでしょうか?
まとめ
ワークフロー自動化OSSのn8nをFargateで建ててみました。
実際に使ってみると、考慮点がいろいろ出てきましたがAWSのサービスを駆使することでカバーできそうなためうまく活用できそうです。
考慮点に挙げた内容も検証していきたいと思います。